
// 474.一和零
class Solution {
public:
    int findMaxForm(vector<string>& strs, int m, int n) {
        // 二维费用的背包问题

        int len = strs.size();
        vector<vector<int>> dp (m +  1, vector<int>(n + 1));
        for(int  i = 1 ; i <= len ; i++)
        {
            int zero = 0 ,one = 0;
            for(auto& ch : strs[i - 1])
            {
                if(ch == '0') zero++;
                else one++;
            }
            for(int j = m ; j >= zero ; j--)
                for(int k = n; k >= one ; k--)
                    dp[j][k] = max(dp[j][k] , dp[j - zero][k - one] + 1);
        }
        return dp[m][n];
    }
};